home *** CD-ROM | disk | FTP | other *** search
Wrap
package com.extensibility.xml; import com.extensibility.xml.dt.DataType; import com.extensibility.xml.dt.DataTypeFactory; import com.extensibility.xml.dt.DataTypeIntf; import com.extensibility.xml.dt.Facet; import com.extensibility.xml.sax.BufferedHandlerBase; import java.io.FileNotFoundException; import java.io.IOException; import java.io.Reader; import java.io.StringReader; import java.net.UnknownHostException; import java.util.Hashtable; import java.util.Stack; import java.util.Vector; import org.xml.sax.AttributeList; import org.xml.sax.InputSource; import org.xml.sax.Locator; import org.xml.sax.Parser; import org.xml.sax.SAXException; import org.xml.sax.SAXParseException; import org.xml.sax.helpers.LocatorImpl; public final class SOX2Reader extends BufferedHandlerBase { static final String TOPLEVEL_ROOT = "schema"; static final String TOPLEVEL_INTRO = "intro"; static final String TOPLEVEL_DATATYPE = "datatype"; static final String TOPLEVEL_ELEMTYPE = "elementtype"; static final String TOPLEVEL_JOIN = "join"; static final String TOPLEVEL_COMMENT = "comment"; static final String TOPLEVEL_NAMESPACE = "namespace"; static final String TOPLEVEL_ATTRTYPE = "attdef"; static final String TAG_ELEMENT = "element"; static final String TAG_EXTENDS = "extends"; static final String TAG_APPEND = "append"; static final String TAG_EXPLAIN = "explain"; static final String TAG_CM = "model"; static final String TAG_CM_SEQ = "sequence"; static final String TAG_CM_CHOICE = "choice"; static final String TAG_CM_EMPTY = "empty"; static final String TAG_CM_PCDATA = "string"; static final String TAG_ATTR_OPTION = "option"; static final String TAG_ATTR_REQUIRED = "required"; static final String TAG_ATTR_FIXED = "fixed"; static final String TAG_ATTR_DEFAULT = "default"; static final String TAG_ATTR_IMPLIED = "implied"; static final String TAG_ENUMERATION = "enumeration"; static final String TAG_VARCHAR = "varchar"; static final String TAG_SCALAR = "scalar"; static String joinSubsetName = null; private Hashtable dtElemNames; private Hashtable elemDecls; private Hashtable dtDecls; private Hashtable currentAttrs; private ElementDeclaration currentElemDecl; private AttributeDeclaration currentAttrDecl; private DataTypeDeclaration currentDataTypeDecl; private ExternalSubset currentXS; private NamespaceDeclaration currentNSDecl; private Vector attrChoices; private Vector elemDeclAttrs; private Hashtable namespaces; private SchemaIntf schema; private ContentModel currentCM; private boolean cmClosed; private Stack cmConnectors; private Stack contentModels; private Object commentKind; private StringBuffer commentContent; private StringBuffer optionContent; private boolean commentStart; private Vector topComments; private boolean optionStart; private boolean defaultStart; private String defaultContent; private boolean fixedStart; private String fixedContent; private Hashtable optionExplains; private String lastEnumExplain; private boolean inEnumeration; private boolean inProlog = true; private Locator locator; boolean isFirstGroup = false; public URI logicalURI; public SOX2Reader(SchemaIntf var1) { this.schema = var1; } public void error(String var1, int var2, int var3, int var4) { ParserException var5 = new ParserException(var2, var1); var5.setSourceLinePos(var3); if (this.schema.getShowErrors() && this.currentAttrDecl != null) { this.currentAttrDecl.addError(var5); } else if (this.schema.getShowErrors() && this.currentElemDecl != null) { this.currentElemDecl.addError(var5); } else if (this.schema.getShowErrors() && this.currentDataTypeDecl != null) { this.currentDataTypeDecl.addError(var5); } else { var5.setSource(String.valueOf(String.valueOf(String.valueOf(String.valueOf("See Line: ").concat(String.valueOf(var3))).concat(String.valueOf(" at Column:"))).concat(String.valueOf(var4))).concat(String.valueOf(" in file."))); this.schema.addError(var5); } } public void error(SAXParseException var1) { this.error(((SAXException)var1).getMessage(), 240, this.locator.getLineNumber(), this.locator.getColumnNumber()); } public void fatalError(SAXParseException var1) { this.error(var1); } public void setDocumentLocator(Locator var1) { this.locator = var1; } public InputSource resolveEntity(String var1, String var2) { return !var2.startsWith("urn") && var2.indexOf("/urn:") == -1 ? null : new InputSource(new StringReader("")); } public void parse(URI var1, URI var2) throws IOException { this.logicalURI = var2; Reader var4 = null; try { Parser var3 = SchemaUtilities.getParser(); this.setDocumentLocator(new LocatorImpl()); var3.setEntityResolver(this); var3.setErrorHandler(this); var3.setDocumentHandler(this); var4 = var1.createReader(); InputSource var5 = new InputSource(var4); var5.setSystemId(var1.getFullName()); var3.parse(var5); } catch (IOException var16) { throw var16; } catch (Exception var17) { this.error(((Throwable)var17).getMessage(), 999, this.locator.getLineNumber(), this.locator.getColumnNumber()); } finally { try { if (var4 != null) { var4.close(); } } catch (IOException var15) { } } } public void startDocument() { this.dtElemNames = new Hashtable(); this.elemDecls = new Hashtable(); this.dtDecls = new Hashtable(); this.currentAttrs = new Hashtable(); this.currentXS = null; this.currentNSDecl = null; this.currentElemDecl = null; this.currentAttrDecl = null; this.currentDataTypeDecl = null; this.attrChoices = new Vector(); this.optionExplains = new Hashtable(); this.inEnumeration = false; this.lastEnumExplain = null; this.elemDeclAttrs = new Vector(); this.namespaces = new Hashtable(); this.cmClosed = true; this.cmConnectors = new Stack(); this.contentModels = new Stack(); this.commentKind = null; this.commentContent = new StringBuffer(); this.optionContent = new StringBuffer(); this.commentStart = false; this.topComments = new Vector(); this.optionStart = false; this.fixedStart = false; this.defaultStart = false; this.fixedContent = null; this.defaultContent = null; } public void endDocument() { } public void startElement(String var1, AttributeList var2) { this.inProlog = false; if (((BufferedHandlerBase)this).isSavingXML()) { super.startElement(var1, var2); } else { this.parseElement(var1, var2); } } public void processingInstruction(String var1, String var2) throws SAXException { ProcessingInstruction var3 = new ProcessingInstruction(var1, var2); ((BaseDeclaration)var3).setURI(this.logicalURI); if (this.inProlog) { ((BaseDeclaration)var3).setIsInProlog(true); } this.schema.insertDeclaration(var3, (BaseDeclaration)null); } private void doSchema(AttributeList var1) { String var2 = null; String var3 = null; String var4 = null; for(int var5 = 0; var5 < var1.getLength(); ++var5) { String var6 = var1.getName(var5); if (var6.equals("uri")) { var2 = var1.getValue(var5); } else if (var6.equals("prefix")) { var3 = var1.getValue(var5); } else if (var6.equals("soxlang-version")) { var4 = var1.getValue(var5); } else { this.error(String.valueOf("Unrecognized attribute for 'schema' : ").concat(String.valueOf(var6)), 999, this.locator.getLineNumber(), this.locator.getColumnNumber()); } } if (var2 != null) { this.schema.setNamespace(new URI((URI)null, var2)); } if (var3 != null) { this.schema.setSchemaPrefix(var3); } if (var4 != null && !var4.equals("V0.2.2")) { this.error(var4, 243, this.locator.getLineNumber(), this.locator.getColumnNumber()); } } private void doIntro(AttributeList var1) { ((BufferedHandlerBase)this).setSaveXML(true); ((BufferedHandlerBase)this).clearSavedXML(); } private void doNamespace(AttributeList var1) { String var2 = null; String var3 = null; for(int var4 = 0; var4 < var1.getLength(); ++var4) { String var5 = var1.getName(var4); if (var5.equals("prefix")) { var2 = var1.getValue(var4); } else if (var5.equals("namespace")) { var3 = var1.getValue(var4); } else { this.error(String.valueOf("Unrecognized attribute for 'namespace' : ").concat(String.valueOf(var5)), 999, this.locator.getLineNumber(), this.locator.getColumnNumber()); } } if (var2 == null) { this.error("namespace prefix attribute is required.", 999, this.locator.getLineNumber(), this.locator.getColumnNumber()); } else if (var3 == null) { this.error("namespace location attribute is required.", 999, this.locator.getLineNumber(), this.locator.getColumnNumber()); } else { if (this.namespaces.contains(var2)) { this.error(String.valueOf("Namespace already defined: ").concat(String.valueOf(var2)), 999, this.locator.getLineNumber(), this.locator.getColumnNumber()); } NamespaceDeclaration var6 = new NamespaceDeclaration(var2, var3); this.addComments(var6); this.currentNSDecl = var6; this.schema.insertDeclaration(var6, (BaseDeclaration)null); this.namespaces.put(var3, var2); } } private void doJoin(AttributeList var1) { String var2 = null; String var3 = null; String var4 = null; for(int var5 = 0; var5 < var1.getLength(); ++var5) { String var6 = var1.getName(var5); if (var6.equals("system")) { var2 = var1.getValue(var5); } else if (var6.equals("public")) { var3 = var1.getValue(var5); } else if (var6.equals("datatype")) { var4 = var1.getValue(var5); } else { this.error(String.valueOf("Unrecognized attribute for 'join' : ").concat(String.valueOf(var6)), 999, this.locator.getLineNumber(), this.locator.getColumnNumber()); } } if (var2 == null) { this.error("The 'system' attribute is required for 'join'.", 999, this.locator.getLineNumber(), this.locator.getColumnNumber()); } else { if (var4 != null && !var4.equals("schema")) { this.error("The 'datatype' attribute of 'join' is required to be 'schema'.", 999, this.locator.getLineNumber(), this.locator.getColumnNumber()); } new URI((URI)null, var2); URI var21 = new URI(this.logicalURI, var2); String var7 = DTDUtilities.makeValidName(var21.getShortName()); ExternalPEDeclaration var8 = new ExternalPEDeclaration(var7, var3, var21); ((BaseDeclaration)var8).setURI(this.logicalURI); this.schema.insertDeclaration(var8, (BaseDeclaration)null); try { joinSubsetName = var7; int var9 = this.schema.insertSubset(var8); joinSubsetName = null; if (var9 > 0) { this.error(((BaseDeclaration)var8).getName(), 246, this.locator.getLineNumber(), this.locator.getColumnNumber()); } ExternalSubset var10 = (ExternalSubset)this.schema.getNamedDeclaration(var7, Class.forName("com.extensibility.xml.ExternalSubset")); if (var10 != null) { this.addComments(var10); this.currentXS = var10; } } catch (UnknownHostException var17) { this.error(var21.getFullName(), 245, this.locator.getLineNumber(), this.locator.getColumnNumber()); } catch (FileNotFoundException var18) { this.error(var21.getShortName(), 244, this.locator.getLineNumber(), this.locator.getColumnNumber()); } catch (IOException var19) { this.error(((Throwable)var19).getMessage(), 247, this.locator.getLineNumber(), this.locator.getColumnNumber()); } finally { joinSubsetName = null; } } } private void doElementType(AttributeList var1) { String var2 = null; boolean var3 = false; for(int var4 = 0; var4 < var1.getLength(); ++var4) { String var5 = var1.getName(var4); if (var5.equals("name")) { var2 = var1.getValue(var4); } else { this.error(String.valueOf("Unrecognized attribute for 'elementtype' : ").concat(String.valueOf(var5)), 999, this.locator.getLineNumber(), this.locator.getColumnNumber()); } } if (var2 == null) { var3 = true; var2 = "undefinedName"; } if (this.elemDecls.containsKey(var2)) { this.currentElemDecl = (ElementDeclaration)this.elemDecls.get(var2); } else { this.currentElemDecl = new ElementDeclaration(var2, 3); this.currentElemDecl.setURI(this.logicalURI); this.elemDecls.put(var2, this.currentElemDecl); } this.addComments(this.currentElemDecl); if (this.dtElemNames.containsKey(var2)) { this.error(String.valueOf("elementtype name used more than once: ").concat(String.valueOf(var2)), 999, this.locator.getLineNumber(), this.locator.getColumnNumber()); } else { this.dtElemNames.put(var2, this.currentElemDecl); } for(int var8 = 0; var8 < var1.getLength(); ++var8) { String var6 = var1.getName(var8); if (var6.indexOf(":") != -1) { String var7 = var1.getValue(var8); this.currentElemDecl.putMetaProp(var6, var7); } } if (var3) { this.error("A 'name' attribute is required for elementtype -- setting to 'undefinedName'.", 999, this.locator.getLineNumber(), this.locator.getColumnNumber()); } } private void doDataType(AttributeList var1) { String var2 = null; boolean var3 = false; for(int var4 = 0; var4 < var1.getLength(); ++var4) { String var5 = var1.getName(var4); if (var5.equals("name")) { var2 = var1.getValue(var4); } else { this.error(String.valueOf("Unrecognized attribute for 'datatype' : ").concat(String.valueOf(var5)), 999, this.locator.getLineNumber(), this.locator.getColumnNumber()); } } if (var2 == null) { var3 = true; var2 = "undefinedName"; } this.currentDataTypeDecl = new DataTypeDeclaration(var2); if (var3) { this.error("A 'name' attribute is required for 'datatype' -- setting to 'undefinedName'.", 999, this.locator.getLineNumber(), this.locator.getColumnNumber()); } this.addComments(this.currentDataTypeDecl); this.currentDataTypeDecl.setURI(this.logicalURI); if (this.dtElemNames.containsKey(var2)) { this.error(String.valueOf("datatype name used more than once: ").concat(String.valueOf(var2)), 999, this.locator.getLineNumber(), this.locator.getColumnNumber()); } else { this.dtElemNames.put(var2, this.currentDataTypeDecl); } } private void doAttrType(AttributeList var1) { boolean var2 = false; String var3 = null; String var4 = null; String var5 = new String("string"); for(int var6 = 0; var6 < var1.getLength(); ++var6) { String var7 = var1.getName(var6); if (var7.equals("prefix")) { var4 = var1.getValue(var6); } else if (var7.equals("datatype")) { var5 = var1.getValue(var6); } else if (var7.equals("name")) { var3 = var1.getValue(var6); } else { this.error(var7, 252, this.locator.getLineNumber(), this.locator.getColumnNumber()); } } if (var3 == null) { var2 = true; var3 = "undefinedName"; } if (var4 != null) { if (!this.namespaces.contains(var4)) { this.error(var4, 238, this.locator.getLineNumber(), this.locator.getColumnNumber()); } var3 = String.valueOf(String.valueOf(var4).concat(String.valueOf(":"))).concat(String.valueOf(var3)); } else { var3 = var3; } DataType var13 = this.convertDataType(var5); boolean var8 = false; this.currentAttrDecl = new AttributeDeclaration(this.currentElemDecl, var3, var13, (Vector)null, false, (String)null); if (var2) { this.error("A 'name' attribute is required for 'attdef' -- setting to 'undefinedName'.", 999, this.locator.getLineNumber(), this.locator.getColumnNumber()); } this.currentAttrDecl.setURI(this.currentElemDecl.getURI()); this.currentAttrs.put(var3, this.currentAttrDecl); if (this.currentElemDecl != null) { this.elemDeclAttrs.addElement(this.currentAttrDecl); } for(int var9 = 0; var9 < var1.getLength(); ++var9) { String var10 = var1.getName(var9); if (var10.indexOf(":") != -1) { String var11 = var1.getValue(var9); this.currentAttrDecl.putMetaProp(var10, var11); } } } public void doEnumeration(AttributeList var1) { String var2 = null; String var3 = null; this.inEnumeration = true; this.lastEnumExplain = null; for(int var4 = 0; var4 < var1.getLength(); ++var4) { String var5 = var1.getName(var4); if (var5.equals("prefix")) { var2 = var1.getValue(var4); } else if (var5.equals("datatype")) { var3 = var1.getValue(var4); } else { this.error(String.valueOf("Unrecognzed attribute of enumeration: ").concat(String.valueOf(var5)), 999, this.locator.getLineNumber(), this.locator.getColumnNumber()); } } if (var3 == null) { this.error("The 'datatype' attribute is required for enumeration -- defaulting to 'string'.", 999, this.locator.getLineNumber(), this.locator.getColumnNumber()); var3 = "string"; } if (var2 != null) { if (!this.namespaces.contains(var2)) { this.error(var2, 238, this.locator.getLineNumber(), this.locator.getColumnNumber()); } var3 = String.valueOf(String.valueOf(var2).concat(String.valueOf(":"))).concat(String.valueOf(var3)); } DataType var6 = this.convertDataType(var3); if (this.currentAttrDecl != null) { this.currentAttrDecl.setDataType(var6); } else if (this.currentDataTypeDecl != null) { this.currentDataTypeDecl.setDataType(var6); } else { this.error("Enumeration should only be used within attdef and datatype elements.", 999, this.locator.getLineNumber(), this.locator.getColumnNumber()); } } private void doPCData(AttributeList var1) { if (this.getCurrentConnection() == ',') { String var2 = null; String var3 = null; for(int var4 = 0; var4 < var1.getLength(); ++var4) { String var5 = var1.getName(var4); if (var5.equals("prefix")) { var2 = var1.getValue(var4); } else if (var5.equals("datatype")) { var3 = var1.getValue(var4); } else { this.error(String.valueOf("Unrecognzed attribute of 'string': ").concat(String.valueOf(var5)), 999, this.locator.getLineNumber(), this.locator.getColumnNumber()); } } if (var2 != null && !this.namespaces.contains(var2)) { this.error(var2, 238, this.locator.getLineNumber(), this.locator.getColumnNumber()); } this.currentElemDecl.setContentModel(5); if (var3 != null) { if (var2 != null) { var3 = String.valueOf(String.valueOf(var2).concat(String.valueOf(":"))).concat(String.valueOf(var3)); } DataType var6 = this.convertDataType(var3); this.currentElemDecl.setDataType(var6); } this.cmClosed = true; } } void setOccurance(String var1, ContentModelTerm var2) { if (var1 == null) { var2.setOccurance('\u0000'); } else if (var1.length() == 1) { if (var1.charAt(0) != 0 && var1.charAt(0) != '+' && var1.charAt(0) != '?' && var1.charAt(0) != '*') { this.error(String.valueOf("Invalid occurs character : '").concat(String.valueOf(var1)), 999, this.locator.getLineNumber(), this.locator.getColumnNumber()); } else { var2.setOccurance(var1.charAt(0)); } } else { int[] var3 = new int[]{1, 1}; DTDUtilities.parseSourceOccurance(var1, 0, var3); var2.setOccurance(var3[0], var3[1]); } } private void doModel() { this.isFirstGroup = true; this.currentElemDecl.setContentModel(6); this.currentCM = this.currentElemDecl.getContentModel(); this.cmClosed = false; this.cmConnectors.push(new Character(',')); this.contentModels.push(this.currentCM.getRootGroup()); } private void doSequenceChoice(String var1, AttributeList var2) { int var3 = var1.equals("sequence") ? 44 : 124; String var4 = null; String var5 = null; ContentModelTerm var6 = new ContentModelTerm(); for(int var7 = 0; var7 < var2.getLength(); ++var7) { String var8 = var2.getName(var7); if (var8.equals("name")) { var4 = var2.getValue(var7); } else if (var8.equals("occurs")) { var5 = var2.getValue(var7); } else { this.error(String.valueOf(String.valueOf(String.valueOf("Unrecognzed attribute of '").concat(String.valueOf(var1))).concat(String.valueOf("': "))).concat(String.valueOf(var8)), 999, this.locator.getLineNumber(), this.locator.getColumnNumber()); } } if (var4 != null) { var6.setLocalTag(var4); } this.setOccurance(var5, var6); var6.setConnection(this.getCurrentConnection()); if (this.isFirstGroup) { this.getCurrentParent().setLocalTag(var4); this.getCurrentParent().setOccurance(var6.getMinOccurance(), var6.getMaxOccurance()); this.getCurrentParent().setConnection(var6.getConnection()); this.cmConnectors.pop(); this.cmConnectors.push(new Character((char)var3)); } else { this.getCurrentParent().addTerm(var6); this.contentModels.push(var6); this.cmConnectors.push(new Character((char)var3)); } this.isFirstGroup = false; } private char getCurrentConnection() { return (Character)this.cmConnectors.peek(); } private ContentModelTerm getCurrentParent() { return (ContentModelTerm)this.contentModels.peek(); } private void doElement(AttributeList var1) { String var2 = null; String var3 = null; String var4 = null; String var5 = null; for(int var6 = 0; var6 < var1.getLength(); ++var6) { String var7 = var1.getName(var6); if (var7.equals("prefix")) { var2 = var1.getValue(var6); } else if (var7.equals("type")) { var3 = var1.getValue(var6); } else if (var7.equals("name")) { var4 = var1.getValue(var6); } else if (var7.equals("occurs")) { var5 = var1.getValue(var6); } else { this.error(String.valueOf("Unrecognzed attribute of 'element': ").concat(String.valueOf(var7)), 999, this.locator.getLineNumber(), this.locator.getColumnNumber()); } } if (var3 == null) { this.error("The 'type' attribute is required for 'element' -- setting to 'undefinedType'.", 999, this.locator.getLineNumber(), this.locator.getColumnNumber()); var3 = "undefinedType"; } if (var2 != null) { if (!this.namespaces.contains(var2)) { this.error(String.valueOf(String.valueOf(var3).concat(String.valueOf(", "))).concat(String.valueOf(var2)), 242, this.locator.getLineNumber(), this.locator.getColumnNumber()); } } else if (this.elemDecls.containsKey(var3)) { ElementDeclaration var12 = (ElementDeclaration)this.elemDecls.get(var3); } else { ElementDeclaration var13 = new ElementDeclaration(var3, 3); ((BaseDeclaration)var13).setURI(this.logicalURI); this.elemDecls.put(var3, var13); } char var8 = this.getCurrentConnection(); ContentModelTerm var9 = this.getCurrentParent(); String var10; if (var2 != null && var2.length() != 0) { var10 = String.valueOf(String.valueOf(var2).concat(String.valueOf(":"))).concat(String.valueOf(var3)); } else { var10 = var3; } ContentModelTerm var11 = new ContentModelTerm(new TypeRef(var10), '\u0000', var8); this.setOccurance(var5, var11); if (var4 != null) { var11.setLocalTag(var4); } var9.addTerm(var11); } public void doScalar(AttributeList var1) { if (this.currentDataTypeDecl == null && this.currentAttrDecl == null) { this.error("scalar should only be used within attdef and datatype elements.", 999, this.locator.getLineNumber(), this.locator.getColumnNumber()); } else { String var2 = null; String var3 = new String("number"); String var4 = null; String var5 = null; String var6 = null; String var7 = null; String var8 = new String("false"); String var9 = new String("false"); for(int var10 = 0; var10 < var1.getLength(); ++var10) { String var11 = var1.getName(var10); if (var11.equals("prefix")) { var2 = var1.getValue(var10); } else if (var11.equals("datatype")) { var3 = var1.getValue(var10); } else if (var11.equals("digits")) { var4 = var1.getValue(var10); } else if (var11.equals("decimals")) { var5 = var1.getValue(var10); } else if (var11.equals("minvalue")) { var6 = var1.getValue(var10); } else if (var11.equals("maxvalue")) { var7 = var1.getValue(var10); } else if (var11.equals("minexclusive")) { var8 = var1.getValue(var10); } else if (var11.equals("maxexclusive")) { var9 = var1.getValue(var10); } else { this.error(String.valueOf("Unrecognized attribute in scalar element: ").concat(String.valueOf(var11)), 999, this.locator.getLineNumber(), this.locator.getColumnNumber()); } } if (var2 != null) { if (!this.namespaces.contains(var2)) { this.error(String.valueOf(String.valueOf(var3).concat(String.valueOf(", "))).concat(String.valueOf(var2)), 242, this.locator.getLineNumber(), this.locator.getColumnNumber()); } var3 = String.valueOf(String.valueOf(var2).concat(String.valueOf(":"))).concat(String.valueOf(var3)); } DataType var13 = this.convertDataType(var3); if (var4 != null || var5 != null) { Object var12 = null; if (var4 != null) { Facet var14 = new Facet(Facet.FACET_DIGITS_NAME, var4); var13 = (DataType)var13.applyFacet(var14); } if (var5 != null) { Facet var15 = new Facet(Facet.FACET_DECIMALS_NAME, var5); var13 = (DataType)var13.applyFacet(var15); } } Object var16 = null; if (var6 != null) { Facet var17 = new Facet(Facet.FACET_MIN_NAME, var6); var13 = (DataType)var13.applyFacet(var17); } if (var8 != null) { Facet var18 = new Facet(Facet.FACET_MINEX_NAME, var8); var13 = (DataType)var13.applyFacet(var18); } if (var7 != null) { Facet var19 = new Facet(Facet.FACET_MAX_NAME, var7); var13 = (DataType)var13.applyFacet(var19); } if (var9 != null) { Facet var20 = new Facet(Facet.FACET_MAXEX_NAME, var9); var13 = (DataType)var13.applyFacet(var20); } if (this.currentDataTypeDecl != null) { this.currentDataTypeDecl.setDataType(var13); } else if (this.currentAttrDecl != null) { this.currentAttrDecl.setDataType(var13); } } } public void doVarChar(AttributeList var1) { if (this.currentDataTypeDecl == null && this.currentAttrDecl == null) { this.error("varchar should only be used within attdef and datatype elements.", 999, this.locator.getLineNumber(), this.locator.getColumnNumber()); } else { String var2 = null; String var3 = new String("string"); String var4 = null; for(int var5 = 0; var5 < var1.getLength(); ++var5) { String var6 = var1.getName(var5); if (var6.equals("prefix")) { var2 = var1.getValue(var5); } else if (var6.equals("datatype")) { var3 = var1.getValue(var5); } else if (var6.equals("maxlength")) { var4 = var1.getValue(var5); } else { this.error(String.valueOf("Unrecognzed attribute of varchar: ").concat(String.valueOf(var6)), 999, this.locator.getLineNumber(), this.locator.getColumnNumber()); } } if (var2 != null) { if (!this.namespaces.contains(var2)) { this.error(String.valueOf(String.valueOf(var3).concat(String.valueOf(", "))).concat(String.valueOf(var2)), 242, this.locator.getLineNumber(), this.locator.getColumnNumber()); } var3 = String.valueOf(String.valueOf(var2).concat(String.valueOf(":"))).concat(String.valueOf(var3)); } DataType var8 = this.convertDataType(var3); Facet var7 = new Facet(Facet.FACET_MAXLENGTH_NAME, var4); var8 = (DataType)var8.applyFacet(var7); if (this.currentDataTypeDecl != null) { this.currentDataTypeDecl.setDataType(var8); } else if (this.currentAttrDecl != null) { this.currentAttrDecl.setDataType(var8); } } } public void doExtends(AttributeList var1) { String var2 = null; String var3 = null; for(int var4 = 0; var4 < var1.getLength(); ++var4) { String var5 = var1.getName(var4); if (var5.equals("type")) { var2 = var1.getValue(var4); } else if (var5.equals("prefix")) { var3 = var1.getValue(var4); } else { this.error(String.valueOf("Unrecognzed attribute of 'element': ").concat(String.valueOf(var5)), 999, this.locator.getLineNumber(), this.locator.getColumnNumber()); } } if (var2 == null) { this.error("The 'type' attribute is required for 'extends' -- setting to 'undefinedType'.", 999, this.locator.getLineNumber(), this.locator.getColumnNumber()); var2 = "undefinedType"; } if (this.currentElemDecl == null) { this.error("No enclosing element declaration for extends", 999, this.locator.getLineNumber(), this.locator.getColumnNumber()); } else { if (var3 != null) { var2 = String.valueOf(String.valueOf(var3).concat(String.valueOf(':'))).concat(String.valueOf(var2)); } this.currentElemDecl.setSuperType(new DeclRef(var2, Class.forName("com.extensibility.xml.ElementDeclaration"))); } } public void doAppend(AttributeList var1) { this.currentElemDecl.setContentModel(6); this.currentCM = this.currentElemDecl.getContentModel(); this.currentCM.updateModelTerm(); this.cmClosed = false; this.cmConnectors.push(new Character(',')); this.contentModels.push(this.currentCM); } private void addComments(BaseDeclaration var1) { for(int var2 = 0; var2 < this.topComments.size(); ++var2) { var1.addComment((Comment)this.topComments.elementAt(var2)); } this.topComments.setSize(0); } public void parseElement(String var1, AttributeList var2) { if (var1.equals("schema")) { this.doSchema(var2); } else if (var1.equals("intro")) { this.doIntro(var2); } else if (var1.equals("namespace")) { this.doNamespace(var2); } else if (var1.equals("join")) { this.doJoin(var2); } else if (var1.equals("elementtype")) { this.doElementType(var2); } else if (var1.equals("attdef")) { this.doAttrType(var2); } else if (var1.equals("datatype")) { this.doDataType(var2); } else if (var1.equals("enumeration")) { this.doEnumeration(var2); } else if (var1.equals("option")) { this.optionStart = true; } else if (var1.equals("required")) { this.currentAttrDecl.setRequired(true); } else if (var1.equals("default")) { this.defaultContent = null; this.defaultStart = true; } else if (var1.equals("fixed")) { this.currentAttrDecl.setRequired(true); this.fixedContent = null; this.fixedStart = true; } else if (var1.equals("implied")) { this.currentAttrDecl.setRequired(false); this.fixedContent = null; this.defaultContent = null; this.defaultStart = false; this.fixedStart = false; } else if (var1.equals("model")) { this.doModel(); } else if (var1.equals("empty")) { this.currentElemDecl.setContentModel(3); this.cmClosed = true; } else if (var1.equals("string")) { this.doPCData(var2); } else if (!var1.equals("sequence") && !var1.equals("choice")) { if (var1.equals("element")) { this.doElement(var2); } else if (var1.equals("explain")) { ((BufferedHandlerBase)this).setSaveXML(true); ((BufferedHandlerBase)this).clearSavedXML(); } else if (var1.equals("comment")) { this.commentStart = true; this.commentKind = null; } else if (var1.equals("extends")) { this.doExtends(var2); } else if (var1.equals("append")) { this.doAppend(var2); } else if (var1.equals("scalar")) { this.doScalar(var2); } else if (var1.equals("varchar")) { this.doVarChar(var2); } else { this.error(var1, 239, this.locator.getLineNumber(), this.locator.getColumnNumber()); } } else { this.doSequenceChoice(var1, var2); } } public void endElement(String var1) { if (((BufferedHandlerBase)this).isSavingXML() && !var1.equals("explain") && !var1.equals("intro")) { super.endElement(var1); } else { if (var1.equals("elementtype")) { if (!this.cmClosed) { this.currentElemDecl.setContentModel(2); } this.schema.insertDeclaration(this.currentElemDecl, (BaseDeclaration)null); this.currentElemDecl = null; for(int var2 = 0; var2 < this.elemDeclAttrs.size(); ++var2) { AttributeDeclaration var3 = (AttributeDeclaration)this.elemDeclAttrs.elementAt(var2); this.schema.insertDeclaration(var3, (BaseDeclaration)null); } this.elemDeclAttrs.removeAllElements(); this.currentAttrs.clear(); if (!this.contentModels.empty()) { this.contentModels.removeAllElements(); } if (!this.cmConnectors.empty()) { this.cmConnectors.removeAllElements(); } this.cmClosed = true; } else if (var1.equals("join")) { this.currentXS = null; } else if (var1.equals("namespace")) { this.currentNSDecl = null; } else if (var1.equals("datatype")) { if (this.currentDataTypeDecl != null) { this.schema.insertDeclaration(this.currentDataTypeDecl, (BaseDeclaration)null); } this.currentDataTypeDecl = null; this.attrChoices.removeAllElements(); } else if (var1.equals("model")) { this.cmClosed = true; this.isFirstGroup = false; } else if (!var1.equals("sequence") && !var1.equals("choice")) { if (var1.equals("intro")) { ((BufferedHandlerBase)this).setSaveXML(false); String var5 = ((BufferedHandlerBase)this).getSavedXML(); if (joinSubsetName != null) { ExternalSubset var8 = (ExternalSubset)this.schema.getNamedDeclaration(joinSubsetName, Class.forName("com.extensibility.xml.ExternalSubset")); if (var8 != null) { ((BaseDeclaration)var8).addComment(new Comment("INTRO", var5)); } } else { Vector var9 = new Vector(); var9.addElement(new Comment(var5)); this.schema.setComments((URI)null, var9); } } else if (var1.equals("comment")) { this.commentStart = false; if (this.commentContent.length() > 0) { this.topComments.addElement(new Comment(this.commentContent.toString())); } this.commentContent.setLength(0); } else if (var1.equals("explain")) { ((BufferedHandlerBase)this).setSaveXML(false); String var6 = ((BufferedHandlerBase)this).getSavedXML(); if (this.inEnumeration) { this.lastEnumExplain = var6; } else if (this.currentAttrDecl != null) { this.currentAttrDecl.addComment(new Comment("USAGE", var6)); } else if (this.currentElemDecl != null) { this.currentElemDecl.addComment(new Comment("USAGE", var6)); } else if (this.currentDataTypeDecl != null) { this.currentDataTypeDecl.addComment(new Comment("USAGE", var6)); } else if (this.currentXS != null) { this.currentXS.addComment(new Comment("USAGE", var6)); } else if (this.currentNSDecl != null) { this.currentNSDecl.addComment(new Comment("USAGE", var6)); } else { this.error("Cannot add explain if it doesn't belong to any element declaration", 999, this.locator.getLineNumber(), this.locator.getColumnNumber()); } this.commentKind = null; } else if (var1.equals("attdef")) { this.currentAttrDecl = null; this.attrChoices.removeAllElements(); } else if (var1.equals("enumeration")) { this.inEnumeration = false; Vector var7 = new Vector(); for(int var10 = 0; var10 < this.attrChoices.size(); ++var10) { var7.addElement(this.attrChoices.elementAt(var10)); } if (this.currentAttrDecl != null) { if (!this.optionExplains.isEmpty()) { this.currentAttrDecl.setChoices(var7, this.optionExplains); } else { this.currentAttrDecl.setChoices(var7); } } else if (this.currentDataTypeDecl != null) { Facet var4 = new Facet(Facet.FACET_ENUM_NAME, var7); if (!this.optionExplains.isEmpty()) { var4.setExplains(this.optionExplains); } this.currentDataTypeDecl.applyFacet(var4); } this.optionExplains = new Hashtable(); } else if (var1.equals("option")) { this.optionStart = false; if (this.optionContent.length() > 0) { this.attrChoices.addElement(this.optionContent.toString()); if (this.lastEnumExplain != null) { this.optionExplains.put(this.optionContent.toString(), this.lastEnumExplain); this.lastEnumExplain = null; } } this.optionContent.setLength(0); } else if (var1.equals("fixed")) { this.currentAttrDecl.setDefault(this.fixedContent == null ? "" : this.fixedContent); this.fixedStart = false; } else if (var1.equals("default")) { this.currentAttrDecl.setDefault(this.defaultContent == null ? "" : this.defaultContent); this.defaultStart = false; } else if (var1.equals("extends")) { this.cmClosed = true; } else if (var1.equals("append")) { } } else { if (this.cmConnectors.size() > 1) { this.cmConnectors.pop(); } if (this.contentModels.size() > 1) { this.contentModels.pop(); } } } } public void characters(char[] var1, int var2, int var3) throws SAXException { if (((BufferedHandlerBase)this).isSavingXML()) { super.characters(var1, var2, var3); } else { if (this.optionStart) { this.optionContent.append(var1, var2, var3); } else if (this.fixedStart) { this.fixedContent = String.valueOf(var1, var2, var3); } else if (this.defaultStart) { this.defaultContent = String.valueOf(var1, var2, var3); } else if (this.commentStart) { this.commentContent.append(var1, var2, var3); } else { String var4 = new String(String.valueOf(var1, var2, var3).trim()); if (var4.length() > 0) { this.error(var4, 239, this.locator.getLineNumber(), this.locator.getColumnNumber()); } } } } private DataType convertDataType(String var1) { String var2 = DataTypeIntf.STRING; if (var1 != null) { if (var1.equals("URI")) { var2 = DataTypeIntf.URI; } else if (var1.equals("datetime")) { var2 = DataTypeIntf.DATETIME; } else if (var1.equals("double")) { var2 = DataTypeIntf.R8; } else if (var1.equals("byte")) { var2 = DataTypeIntf.I1; } else if (var1.equals("long")) { var2 = DataTypeIntf.I8; } else if (!DataTypeFactory.isPrimitive(DataTypeFactory.createDataType(var1)) && !var1.equals(DataTypeIntf.BOOLEAN) && !var1.equals(DataTypeIntf.STRING) && !var1.equals(DataTypeIntf.URI) && !var1.equals(DataTypeIntf.NUMBER) && !var1.equals(DataTypeIntf.FLOAT) && !var1.equals(DataTypeIntf.INT) && !var1.equals(DataTypeIntf.DATE) && !var1.equals(DataTypeIntf.TIME) && !var1.equals(DataTypeIntf.DATETIME)) { var2 = var1; } else { var2 = var1; } } return DataTypeFactory.createDataType(var2); } }